]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionSystem: Don't load an extension with invalid stylesheet
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Fri, 3 Aug 2018 15:46:27 +0000 (17:46 +0200)
committerMarco Trevisan <mail@3v1n0.net>
Mon, 3 Sep 2018 23:29:01 +0000 (23:29 +0000)
We currently assign the stylesheet to an extension whenever the file exists,
regardless of whether it actually loaded successfully or not.
And thus we load an extension that ships a stylesheet even if that file can't
be used.

There is no point in trying to load an extension if its stylesheet wasn't
loaded in the first place, so make sure this happens only on success.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/188

js/ui/extensionSystem.js

index e35c01ab824f3080a303fdeb41a61deebf9b2cdb..3f23d273ea9be7ac2b725bcabbfcf95d46b36368 100644 (file)
@@ -115,13 +115,18 @@ function enableExtension(uuid) {
     extensionOrder.push(uuid);
 
     let stylesheetNames = [global.session_mode + '.css', 'stylesheet.css'];
+    let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
     for (let i = 0; i < stylesheetNames.length; i++) {
-        let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
-        if (stylesheetFile.query_exists(null)) {
-            let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
+        try {
+            let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
             theme.load_stylesheet(stylesheetFile);
             extension.stylesheet = stylesheetFile;
             break;
+        } catch (e) {
+            if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
+                continue; // not an error
+            log(`Failed to load stylesheet for extension ${uuid}: ${e.message}`);
+            return;
         }
     }